{
  // 卡顿问题解决方案总结
  // 针对 long task 会阻塞 main thread 的运行的情形, 给出两种解决方案:
  // Web Worker: 使用 Web Worker 提供的多线程环境来处理 long task;
  // Time Slicing: 将主线程上的 long task 进行时间分片;
  //
  // 1 Web Worker
  // Web Worker 存在一些显著的缺点，比如不能直接访问 Web 页面和 DOM API、消耗 CPU 周期且导致系统反应速度变慢。
  //
  // 2 Time Slicing
  function timeSlicing(gen) {
    if (typeof gen === 'function') gen = gen();
    if (!gen || typeof gen.next !== 'function') return;

    (function next() {
      const res = gen.next(); // ①
      if (res.done) return; // ⑤
      setTimeout(next); // ③
    })();
  }

  // 调用时间分片函数
  timeSlicing(function* () {
    const start = performance.now();
    while (performance.now() - start < 1000) {
      console.log('执行逻辑');
      yield; // ②
    }
    console.log('done'); // ④
  });
  // 往时间分片函数 timeSlicing 中传入 generator 函数;
  // 函数的执行顺序 —— ①、②、③、① (此时有个竞赛的关系, 如果 performance.now() - start < 1000 则继续 ②、③, 如果 performance.now() - start >= 1000 则跳出循环执行 ④、⑤);
}
